#pragma once

//如果需要打印文件名、函数名和行号，必须在文件开头定义以下宏。
//如果要在多个文件中打印，也必须在文件开头定义这个宏。
//否则只会打印默认级别，set_level 设置的日志级别不会生效。
#define SPDLOG_ACTIVE_LEVEL SPDLOG_LOGGER_TRACE
#include "spdlog/spdlog.h"
#include "spdlog/sinks/basic_file_sink.h"
#include "spdlog/sinks/stdout_color_sinks.h"
#include "spdlog/sinks/rotating_file_sink.h"
//自定义输出类型,如输出TinyJsonValue，需要包含的头文件，要重载输出运算符(<<)
#include "spdlog/fmt/ostr.h"  

#include <string.h>
#include <iostream>
#include <memory>

using namespace spdlog::sinks;

class LogHandler
{
public:
    LogHandler(const char* log_path)
    {
        auto console_sink = std::make_shared<stdout_color_sink_mt>();
        console_sink->set_level(spdlog::level::debug);
        console_sink->set_pattern("[%n] [%Y-%m-%d %H:%M:%S.%e] [%l] [%t] [%s %!:%#]  %v");

        auto file_sink = std::make_shared<rotating_file_sink_mt>(log_path,1048576*5, 3);
        file_sink->set_level(spdlog::level::debug);
        file_sink->set_pattern("[%n] [%Y-%m-%d %H:%M:%S.%e] [%l] [%t] [%s %!:%#]  %v");

        auto my_logger =std::shared_ptr<spdlog::logger>(new spdlog::logger("spdlog",{console_sink, file_sink}));
        my_logger->set_level(spdlog::level::debug);
        spdlog::set_default_logger(my_logger);
    }
};